// Knockout JavaScript library v1.2.0pre
// (c) 2010 Steven Sanderson - http://knockoutjs.com/
// License: Ms-Pl (http://www.opensource.org/licenses/ms-pl.html)

function a(f) { throw f; } var m = true, o = null, p = false, r = window.ko = {}; r.b = function (f, b) { for (var c = f.split("."), d = window, e = 0; e < c.length - 1; e++) d = d[c[e]]; d[c[c.length - 1]] = b }; r.g = function (f, b, c) { f[b] = c };
r.a = new function () {
    var f = /^(\s|\u00A0)+|(\s|\u00A0)+$/g; return { ba: ["authenticity_token", /^__RequestVerificationToken(_.*)?$/], h: function (b, c) { for (var d = 0, e = b.length; d < e; d++) c(b[d]) }, i: function (b, c) { if (typeof b.indexOf == "function") return b.indexOf(c); for (var d = 0, e = b.length; d < e; d++) if (b[d] == c) return d; return -1 }, xa: function (b, c, d) { for (var e = 0, g = b.length; e < g; e++) if (c.call(d, b[e])) return b[e]; return o }, $: function (b, c) { var d = r.a.i(b, c); d >= 0 && b.splice(d, 1) }, Z: function (b) {
        b = b || []; for (var c = [], d = 0, e = b.length; d <
e; d++) r.a.i(c, b[d]) < 0 && c.push(b[d]); return c
    }, K: function (b, c) { b = b || []; for (var d = [], e = 0, g = b.length; e < g; e++) d.push(c(b[e])); return d }, J: function (b, c) { b = b || []; for (var d = [], e = 0, g = b.length; e < g; e++) c(b[e]) && d.push(b[e]); return d }, L: function (b, c) { for (var d = 0, e = c.length; d < e; d++) b.push(c[d]) }, aa: function (b) { for (; b.firstChild; ) { r.a.e.N(b.firstChild); b.removeChild(b.firstChild) } }, Ua: function (b, c) { r.a.aa(b); c && r.a.h(c, function (d) { b.appendChild(d) }) }, ka: function (b, c) {
        var d = b.nodeType ? [b] : b; if (d.length > 0) {
            for (var e =
d[0], g = e.parentNode, h = 0, i = c.length; h < i; h++) g.insertBefore(c[h], e); h = 0; for (i = d.length; h < i; h++) { r.a.e.N(d[h]); g.removeChild(d[h]) } 
        } 
    }, na: function (b, c) { if (navigator.userAgent.indexOf("MSIE 6") >= 0) b.setAttribute("selected", c); else b.selected = c }, Ia: function (b, c) { if (!b || b.nodeType != 1) return []; var d = []; b.getAttribute(c) !== o && d.push(b); for (var e = b.getElementsByTagName("*"), g = 0, h = e.length; g < h; g++) e[g].getAttribute(c) !== o && d.push(e[g]); return d }, l: function (b) { return (b || "").replace(f, "") }, $a: function (b, c) {
        for (var d =
[], e = (b || "").split(c), g = 0, h = e.length; g < h; g++) { var i = r.a.l(e[g]); i !== "" && d.push(i) } return d
    }, Va: function (b, c) { b = b || ""; if (c.length > b.length) return p; return b.substring(0, c.length) === c }, Ga: function (b, c) { if (c === undefined) return (new Function("return " + b))(); with (c) return eval("(" + b + ")") }, Ea: function (b, c) { if (c.compareDocumentPosition) return (c.compareDocumentPosition(b) & 16) == 16; for (; b != o; ) { if (b == c) return m; b = b.parentNode } return p }, A: function (b) { return r.a.Ea(b, document) }, q: function (b, c, d) {
        if (typeof jQuery !=
"undefined") jQuery(b).bind(c, d); else if (typeof b.addEventListener == "function") b.addEventListener(c, d, p); else if (typeof b.attachEvent != "undefined") b.attachEvent("on" + c, function (e) { d.call(b, e) }); else a(Error("Browser doesn't support addEventListener or attachEvent"))
    }, qa: function (b, c) {
        if (!(b && b.nodeType)) a(Error("element must be a DOM node when calling triggerEvent")); if (typeof document.createEvent == "function") if (typeof b.dispatchEvent == "function") {
            var d = document.createEvent(c == "click" ? "MouseEvents" :
"HTMLEvents"); d.initEvent(c, m, m, window, 0, 0, 0, 0, 0, p, p, p, p, 0, b); b.dispatchEvent(d)
        } else a(Error("The supplied element doesn't support dispatchEvent")); else if (typeof b.fireEvent != "undefined") { if (c == "click") if (b.tagName == "INPUT" && (b.type.toLowerCase() == "checkbox" || b.type.toLowerCase() == "radio")) b.checked = b.checked !== m; b.fireEvent("on" + c) } else a(Error("Browser doesn't support triggering events"))
    }, d: function (b) { return r.C(b) ? b() : b }, Da: function (b, c) { return r.a.i((b.className || "").split(/\s+/), c) >= 0 }, Xa: function (b,
c, d) { var e = r.a.Da(b, c); if (d && !e) b.className = (b.className || "") + " " + c; else if (e && !d) { d = (b.className || "").split(/\s+/); e = ""; for (var g = 0; g < d.length; g++) if (d[g] != c) e += d[g] + " "; b.className = r.a.l(e) } }, Ra: function (b, c) { b = r.a.d(b); c = r.a.d(c); for (var d = [], e = b; e <= c; e++) d.push(e); return d }, ga: function (b) { for (var c = [], d = b.length - 1; d >= 0; d--) c.push(b[d]); return c }, Q: /MSIE 6/i.test(navigator.userAgent), La: /MSIE 7/i.test(navigator.userAgent), da: function (b, c) {
    for (var d = r.a.ga(b.getElementsByTagName("INPUT")).concat(r.a.ga(b.getElementsByTagName("TEXTAREA"))),
e = typeof c == "string" ? function (i) { return i.name === c } : function (i) { return c.test(i.name) }, g = [], h = d.length - 1; h >= 0; h--) e(d[h]) && g.push(d[h]); return g
}, F: function (b) { if (typeof b == "string") if (b = r.a.l(b)) { if (window.JSON && window.JSON.parse) return window.JSON.parse(b); return (new Function("return " + b))() } return o }, U: function (b) {
    if (typeof JSON == "undefined" || typeof JSON.stringify == "undefined") a(Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js"));
    return JSON.stringify(r.a.d(b))
}, Qa: function (b, c, d) {
    d = d || {}; var e = d.params || {}, g = d.includeFields || this.ba, h = b; if (typeof b == "object" && b.tagName == "FORM") { h = b.action; for (var i = g.length - 1; i >= 0; i--) for (var j = r.a.da(b, g[i]), k = j.length - 1; k >= 0; k--) e[j[k].name] = j[k].value } c = r.a.d(c); var l = document.createElement("FORM"); l.style.display = "none"; l.action = h; l.method = "post"; for (var n in c) { b = document.createElement("INPUT"); b.name = n; b.value = r.a.U(r.a.d(c[n])); l.appendChild(b) } for (n in e) {
        b = document.createElement("INPUT");
        b.name = n; b.value = e[n]; l.appendChild(b)
    } document.body.appendChild(l); d.submitter ? d.submitter(l) : l.submit(); setTimeout(function () { l.parentNode.removeChild(l) }, 0)
}, e: { Ya: 0, w: "__ko__" + (new Date).getTime(), Za: {}, t: function (b, c) { var d = r.a.e.ca(b, p); return d === undefined ? undefined : d[c] }, la: function (b, c, d) { r.a.e.ca(b, m)[c] = d }, ca: function (b, c) { var d = b[r.a.e.w]; if (!d) { if (!c) return; d = b[r.a.e.w] = "ko" + r.a.e.Ya++; r.a.e[d] = {} } return r.a.e[d] }, M: function (b) { var c = b[r.a.e.w]; if (c) { delete r.a.e[c]; b[r.a.e.w] = o } }, N: function (b) {
    if (!(b.nodeType !=
1 && b.nodeType != 9)) { r.a.e.M(b); b = b.getElementsByTagName("*"); for (var c = 0, d = b.length; c < d; c++) r.a.e.M(b[c]) } 
} 
}
    }
}; r.b("ko.utils", r.a); r.b("ko.utils.arrayForEach", r.a.h); r.b("ko.utils.arrayFirst", r.a.xa); r.b("ko.utils.arrayFilter", r.a.J); r.b("ko.utils.arrayGetDistinctValues", r.a.Z); r.b("ko.utils.arrayIndexOf", r.a.i); r.b("ko.utils.arrayMap", r.a.K); r.b("ko.utils.arrayPushAll", r.a.L); r.b("ko.utils.arrayRemoveItem", r.a.$); r.b("ko.utils.fieldsIncludedWithJsonPost", r.a.ba); r.b("ko.utils.getFormFields", r.a.da);
r.b("ko.utils.postJson", r.a.Qa); r.b("ko.utils.parseJson", r.a.F); r.b("ko.utils.stringifyJson", r.a.U); r.b("ko.utils.range", r.a.Ra); r.b("ko.utils.triggerEvent", r.a.qa); r.b("ko.utils.unwrapObservable", r.a.d); Function.prototype.bind || (Function.prototype.bind = function (f) { var b = this, c = Array.prototype.slice.call(arguments); f = c.shift(); return function () { return b.apply(f, c.concat(Array.prototype.slice.call(arguments))) } });
r.j = function () {
    function f() { return ((1 + Math.random()) * 4294967296 | 0).toString(16).substring(1) } function b(d, e) { if (d) if (d.nodeType == 8) { var g = r.j.ia(d.nodeValue); g != o && e.push({ Ca: d, Na: g }) } else if (d.nodeType == 1) { g = 0; for (var h = d.childNodes, i = h.length; g < i; g++) b(h[g], e) } } var c = {}; return { S: function (d) { if (typeof d != "function") a(Error("You can only pass a function to ko.memoization.memoize()")); var e = f() + f(); c[e] = d; return "<!--[ko_memo:" + e + "]--\>" }, ra: function (d, e) {
        var g = c[d]; if (g === undefined) a(Error("Couldn't find any memo with ID " +
d + ". Perhaps it's already been unmemoized.")); try { g.apply(o, e || []); return m } finally { delete c[d] } 
    }, sa: function (d, e) { var g = []; b(d, g); for (var h = 0, i = g.length; h < i; h++) { var j = g[h].Ca, k = [j]; e && r.a.L(k, e); r.j.ra(g[h].Na, k); j.nodeValue = ""; j.parentNode && j.parentNode.removeChild(j) } }, ia: function (d) { return (d = d.match(/^\[ko_memo\:(.*?)\]$/)) ? d[1] : o } 
    }
} (); r.b("ko.memoization", r.j); r.b("ko.memoization.memoize", r.j.S); r.b("ko.memoization.unmemoize", r.j.ra); r.b("ko.memoization.parseMemoText", r.j.ia);
r.b("ko.memoization.unmemoizeDomNodeAndDescendants", r.j.sa); r.Wa = function (f, b) { this.za = f; this.s = b; r.g(this, "dispose", this.s) }; r.V = function () { var f = []; this.W = function (b, c) { var d = new r.Wa(c ? function () { b.call(c) } : b, function () { r.a.$(f, d) }); f.push(d); return d }; this.v = function (b) { r.a.h(f.slice(0), function (c) { c && c.za(b) }) }; this.Ja = function () { return f.length }; r.g(this, "subscribe", this.W); r.g(this, "notifySubscribers", this.v); r.g(this, "getSubscriptionsCount", this.Ja) };
r.fa = function (f) { return typeof f.W == "function" && typeof f.v == "function" }; r.b("ko.subscribable", r.V); r.b("ko.isSubscribable", r.fa); r.z = function () { var f = []; return { ya: function () { f.push([]) }, end: function () { return f.pop() }, ja: function (b) { if (!r.fa(b)) a("Only subscribable things can act as dependencies"); f.length > 0 && f[f.length - 1].push(b) } } } ();
r.p = function (f) { function b() { if (arguments.length > 0) { c = arguments[0]; b.v(c); return this } else { r.z.ja(b); return c } } var c = f; b.n = r.p; b.H = function () { b.v(c) }; r.V.call(b); r.g(b, "valueHasMutated", b.H); return b }; r.C = function (f) { if (f === o || f === undefined || f.n === undefined) return p; if (f.n === r.p) return m; return r.C(f.n) }; r.D = function (f) { if (typeof f == "function" && f.n === r.p) return m; if (typeof f == "function" && f.n === r.m && f.Ka) return m; return p }; r.b("ko.observable", r.p); r.b("ko.isObservable", r.C);
r.b("ko.isWriteableObservable", r.D);
r.Pa = function (f) {
    var b = new r.p(f); r.a.h(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (c) { b[c] = function () { var d = b(); d = d[c].apply(d, arguments); b.H(); return d } }); r.a.h(["slice"], function (c) { b[c] = function () { var d = b(); return d[c].apply(d, arguments) } }); b.remove = function (c) { for (var d = b(), e = [], g = [], h = typeof c == "function" ? c : function (l) { return l === c }, i = 0, j = d.length; i < j; i++) { var k = d[i]; h(k) ? g.push(k) : e.push(k) } b(e); return g }; b.Sa = function (c) {
        if (c === undefined) { var d = b(); b([]); return d } if (!c) return [];
        return b.remove(function (e) { return r.a.i(c, e) >= 0 })
    }; b.O = function (c) { for (var d = b(), e = typeof c == "function" ? c : function (h) { return h === c }, g = d.length - 1; g >= 0; g--) if (e(d[g])) d[g]._destroy = m; b.H() }; b.Ba = function (c) { if (c === undefined) return b.O(function () { return m }); if (!c) return []; return b.O(function (d) { return r.a.i(c, d) >= 0 }) }; b.indexOf = function (c) { var d = b(); return r.a.i(d, c) }; b.replace = function (c, d) { var e = b.indexOf(c); if (e >= 0) { b()[e] = d; b.H() } }; r.g(b, "remove", b.remove); r.g(b, "removeAll", b.Sa); r.g(b, "destroy",
b.O); r.g(b, "destroyAll", b.Ba); r.g(b, "indexOf", b.indexOf); return b
}; r.b("ko.observableArray", r.Pa);
r.m = function (f, b, c) {
    function d() { r.a.h(i, function (l) { l.s() }); i = [] } function e(l) { d(); r.a.h(l, function (n) { i.push(n.W(g)) }) } function g() { if (k && typeof c.disposeWhen == "function") if (c.disposeWhen()) { h.s(); return } try { r.z.ya(); j = c.owner ? c.read.call(c.owner) : c.read() } finally { var l = r.a.Z(r.z.end()); e(l) } h.v(j); k = m } function h() {
        if (arguments.length > 0) if (typeof c.write === "function") { var l = arguments[0]; c.owner ? c.write.call(c.owner, l) : c.write(l) } else a("Cannot write a value to a dependentObservable unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");
        else { k || g(); r.z.ja(h); return j } 
    } if (f && typeof f == "object") c = f; else { c = c || {}; c.read = f || c.read; c.owner = b || c.owner } if (typeof c.read != "function") a("Pass a function that returns the value of the dependentObservable"); var i = [], j, k = p; h.n = r.m; h.Ha = function () { return i.length }; h.Ka = typeof c.write === "function"; h.s = function () { d() }; r.V.call(h); c.deferEvaluation !== m && g(); r.g(h, "dispose", h.s); r.g(h, "getDependenciesCount", h.Ha); return h
}; r.m.n = r.p; r.b("ko.dependentObservable", r.m);
(function () {
    function f(d, e, g) { g = g || new c; d = e(d); if (!(typeof d == "object" && d !== o && d !== undefined)) return d; var h = d instanceof Array ? [] : {}; g.save(d, h); b(d, function (i) { var j = e(d[i]); switch (typeof j) { case "boolean": case "number": case "string": case "function": h[i] = j; break; case "object": case "undefined": var k = g.t(j); h[i] = k !== undefined ? k : f(j, e, g) } }); return h } function b(d, e) { if (d instanceof Array) for (var g = 0; g < d.length; g++) e(g); else for (g in d) e(g) } function c() {
        var d = [], e = []; this.save = function (g, h) {
            var i = r.a.i(d,
g); if (i >= 0) e[i] = h; else { d.push(g); e.push(h) } 
        }; this.t = function (g) { g = r.a.i(d, g); return g >= 0 ? e[g] : undefined } 
    } r.pa = function (d) { if (arguments.length == 0) a(Error("When calling ko.toJS, pass the object you want to convert.")); return f(d, function (e) { for (var g = 0; r.C(e) && g < 10; g++) e = e(); return e }) }; r.toJSON = function (d) { d = r.pa(d); return r.a.U(d) } 
})(); r.b("ko.toJS", r.pa); r.b("ko.toJSON", r.toJSON);
r.f = { k: function (f) { if (f.tagName == "OPTION") { if (f.__ko__hasDomDataOptionValue__ === m) return r.a.e.t(f, r.c.options.ha); return f.getAttribute("value") } else return f.tagName == "SELECT" ? f.selectedIndex >= 0 ? r.f.k(f.options[f.selectedIndex]) : undefined : f.value }, I: function (f, b) {
    if (f.tagName == "OPTION") switch (typeof b) {
        case "string": case "number": r.a.e.M(f); "__ko__hasDomDataOptionValue__" in f && delete f.__ko__hasDomDataOptionValue__; f.value = b; break; default: r.a.e.la(f, r.c.options.ha, b); f.__ko__hasDomDataOptionValue__ =
m; f.value = ""
    } else if (f.tagName == "SELECT") for (var c = f.options.length - 1; c >= 0; c--) { if (r.f.k(f.options[c]) == b) { f.selectedIndex = c; break } } else { if (b === o || b === undefined) b = ""; f.value = b } 
} 
}; r.b("ko.selectExtensions", r.f); r.b("ko.selectExtensions.readValue", r.f.k); r.b("ko.selectExtensions.writeValue", r.f.I);
r.o = function () {
    function f(e, g) { return e.replace(b, function (h, i) { return g[i] }) } var b = /\[ko_token_(\d+)\]/g, c = /^[\_$a-z][\_$a-z0-9]*(\[.*?\])*(\.[\_$a-z][\_$a-z0-9]*(\[.*?\])*)*$/i, d = ["true", "false"]; return { F: function (e) {
        e = r.a.l(e); if (e.length < 3) return {}; for (var g = [], h = o, i, j = e.charAt(0) == "{" ? 1 : 0; j < e.length; j++) {
            var k = e.charAt(j); if (h === o) switch (k) { case '"': case "'": case "/": h = j; i = k; break; case "{": h = j; i = "}"; break; case "[": h = j; i = "]" } else if (k == i) {
                k = e.substring(h, j + 1); g.push(k); var l = "[ko_token_" + (g.length -
1) + "]"; e = e.substring(0, h) + l + e.substring(j + 1); j -= k.length - l.length; h = o
            } 
        } h = {}; e = e.split(","); i = 0; for (j = e.length; i < j; i++) { l = e[i]; var n = l.indexOf(":"); if (n > 0 && n < l.length - 1) { k = r.a.l(l.substring(0, n)); l = r.a.l(l.substring(n + 1)); if (k.charAt(0) == "{") k = k.substring(1); if (l.charAt(l.length - 1) == "}") l = l.substring(0, l.length - 1); k = r.a.l(f(k, g)); l = r.a.l(f(l, g)); h[k] = l } } return h
    }, P: function (e) {
        var g = r.o.F(e), h = [], i; for (i in g) {
            var j = g[i], k; k = j; k = r.a.i(d, r.a.l(k).toLowerCase()) >= 0 ? p : k.match(c) !== o; if (k) {
                h.length > 0 &&
h.push(", "); h.push(i + " : function(__ko_value) { " + j + " = __ko_value; }")
            } 
        } if (h.length > 0) e = e + ", '_ko_property_writers' : { " + h.join("") + " } "; return e
    } 
    }
} (); r.b("ko.jsonExpressionRewriting", r.o); r.b("ko.jsonExpressionRewriting.parseJson", r.o.F); r.b("ko.jsonExpressionRewriting.insertPropertyAccessorsIntoJson", r.o.P); r.c = {};
r.Y = function (f, b, c) {
    function d(i) { return function () { return h[i] } } function e() { return h } var g = m, h; new r.m(function () {
        var i; if (!(i = typeof b == "function" ? b() : b)) { var j = f.getAttribute("data-bind"); try { var k = " { " + r.o.P(j) + " } "; i = r.a.Ga(k, c === o ? window : c) } catch (l) { a(Error("Unable to parse binding attribute.\nMessage: " + l + ";\nAttribute value: " + j)) } } h = i; if (g) for (var n in h) r.c[n] && typeof r.c[n].init == "function" && (0, r.c[n].init)(f, d(n), e, c); for (n in h) r.c[n] && typeof r.c[n].update == "function" && (0, r.c[n].update)(f,
d(n), e, c)
    }, o, { disposeWhen: function () { return !r.a.A(f) } }); g = p
}; r.ua = function (f, b) { if (b && b.nodeType == undefined) a(Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node (note: this is a breaking change since KO version 1.05)")); b = b || window.document.body; var c = r.a.Ia(b, "data-bind"); r.a.h(c, function (d) { r.Y(d, o, f) }) }; r.b("ko.bindingHandlers", r.c); r.b("ko.applyBindings", r.ua);
r.c.click = { init: function (f, b, c, d) { r.a.q(f, "click", function (e) { var g, h = b(); try { g = h.call(d) } finally { if (g !== m) if (e.preventDefault) e.preventDefault(); else e.returnValue = p } }) } }; r.c.submit = { init: function (f, b, c, d) { if (typeof b() != "function") a(Error("The value for a submit binding must be a function to invoke on submit")); r.a.q(f, "submit", function (e) { var g, h = b(); try { g = h.call(d, f) } finally { if (g !== m) if (e.preventDefault) e.preventDefault(); else e.returnValue = p } }) } };
r.c.visible = { update: function (f, b) { var c = r.a.d(b()), d = f.style.display != "none"; if (c && !d) f.style.display = ""; else if (!c && d) f.style.display = "none" } }; r.c.enable = { update: function (f, b) { var c = r.a.d(b()); if (c && f.disabled) f.removeAttribute("disabled"); else if (!c && !f.disabled) f.disabled = m } }; r.c.disable = { update: function (f, b) { r.c.enable.update(f, function () { return !r.a.d(b()) }) } };
r.c.value = { init: function (f, b, c) { var d = c().valueUpdate || "change", e = p; if (r.a.Va(d, "after")) { e = m; d = d.substring(5) } var g = e ? function (h) { setTimeout(h, 0) } : function (h) { h() }; r.a.q(f, d, function () { g(function () { var h = b(), i = r.f.k(f); if (r.D(h)) h(i); else { h = c(); h._ko_property_writers && h._ko_property_writers.value && h._ko_property_writers.value(i) } }) }) }, update: function (f, b) {
    var c = r.a.d(b()), d = r.f.k(f), e = c != d; if (c === 0 && d !== 0 && d !== "0") e = m; if (e) { d = function () { r.f.I(f, c) }; d(); f.tagName == "SELECT" && setTimeout(d, 0) } if (f.tagName ==
"SELECT") { d = r.f.k(f); d !== c && r.a.qa(f, "change") } 
} 
};
r.c.options = { update: function (f, b, c) {
    if (f.tagName != "SELECT") a(Error("options binding applies only to SELECT elements")); var d = r.a.K(r.a.J(f.childNodes, function (l) { return l.tagName && l.tagName == "OPTION" && l.selected }), function (l) { return r.f.k(l) || l.innerText || l.textContent }), e = f.scrollTop, g = r.a.d(b()); r.a.aa(f); if (g) {
        var h = c(); if (typeof g.length != "number") g = [g]; if (h.optionsCaption) { var i = document.createElement("OPTION"); i.innerHTML = h.optionsCaption; r.f.I(i, undefined); f.appendChild(i) } c = 0; for (b = g.length; c <
b; c++) { i = document.createElement("OPTION"); var j = typeof h.optionsValue == "string" ? g[c][h.optionsValue] : g[c], k = h.optionsText; optionText = typeof k == "function" ? k(g[c]) : typeof k == "string" ? g[c][k] : j; j = r.a.d(j); optionText = r.a.d(optionText); r.f.I(i, j); i.innerHTML = optionText.toString(); f.appendChild(i) } g = f.getElementsByTagName("OPTION"); c = h = 0; for (b = g.length; c < b; c++) if (r.a.i(d, r.f.k(g[c])) >= 0) { r.a.na(g[c], m); h++ } if (e) f.scrollTop = e
    } 
} 
}; r.c.options.ha = "__ko.bindingHandlers.options.optionValueDomData__";
r.c.selectedOptions = { ea: function (f) { var b = []; f = f.childNodes; for (var c = 0, d = f.length; c < d; c++) { var e = f[c]; e.tagName == "OPTION" && e.selected && b.push(r.f.k(e)) } return b }, init: function (f, b, c) { r.a.q(f, "change", function () { var d = b(); if (r.D(d)) d(r.c.selectedOptions.ea(this)); else { d = c(); d._ko_property_writers && d._ko_property_writers.value && d._ko_property_writers.value(r.c.selectedOptions.ea(this)) } }) }, update: function (f, b) {
    if (f.tagName != "SELECT") a(Error("values binding applies only to SELECT elements")); var c =
r.a.d(b()); if (c && typeof c.length == "number") for (var d = f.childNodes, e = 0, g = d.length; e < g; e++) { var h = d[e]; h.tagName == "OPTION" && r.a.na(h, r.a.i(c, r.f.k(h)) >= 0) } 
} 
}; r.c.text = { update: function (f, b) { var c = r.a.d(b()); if (c === o || c === undefined) c = ""; typeof f.innerText == "string" ? f.innerText = c : f.textContent = c } }; r.c.html = { update: function (f, b) { var c = r.a.d(b()); if (c === o || c === undefined) c = ""; f.innerHTML = c } };
r.c.css = { update: function (f, b) { var c = r.a.d(b() || {}), d; for (d in c) if (typeof d == "string") { var e = r.a.d(c[d]); r.a.Xa(f, d, e) } } }; r.c.style = { update: function (f, b) { var c = r.a.d(b() || {}), d; for (d in c) if (typeof d == "string") { var e = r.a.d(c[d]); f.style[d] = e || "" } } }; r.c.uniqueName = { init: function (f, b) { if (b()) { f.name = "ko_unique_" + ++r.c.uniqueName.Aa; r.a.Q && f.mergeAttributes(document.createElement("<INPUT name='" + f.name + "'/>"), p) } } }; r.c.uniqueName.Aa = 0;
r.c.checked = { init: function (f, b, c) { function d() { var e; if (f.type == "checkbox") e = f.checked; else if (f.type == "radio" && f.checked) e = f.value; else return; var g = b(); if (r.D(g)) g() !== e && g(e); else { g = c(); g._ko_property_writers && g._ko_property_writers.checked && g._ko_property_writers.checked(e) } } r.a.q(f, "change", d); r.a.q(f, "click", d); f.type == "radio" && !f.name && r.c.uniqueName.init(f, function () { return m }) }, update: function (f, b) {
    var c = r.a.d(b()); if (f.type == "checkbox") (f.checked = c) && r.a.Q && f.mergeAttributes(document.createElement("<INPUT type='checkbox' checked='checked' />"),
p); else if (f.type == "radio") { f.checked = f.value == c; if (f.value == c && (r.a.Q || r.a.La)) f.mergeAttributes(document.createElement("<INPUT type='radio' checked='checked' />"), p) } 
} 
};
r.X = function () { this.renderTemplate = function () { a("Override renderTemplate in your ko.templateEngine subclass") }; this.isTemplateRewritten = function () { a("Override isTemplateRewritten in your ko.templateEngine subclass") }; this.rewriteTemplate = function () { a("Override rewriteTemplate in your ko.templateEngine subclass") }; this.createJavaScriptEvaluatorBlock = function () { a("Override createJavaScriptEvaluatorBlock in your ko.templateEngine subclass") } }; r.b("ko.templateEngine", r.X);
r.G = function () {
    var f = /(<[a-z]+\d*(\s+(?!data-bind=)[a-z0-9]+(=(\"[^\"]*\"|\'[^\']*\'))?)*\s+)data-bind=(["'])([\s\S]*?)\5/g; return { Fa: function (b, c) { c.isTemplateRewritten(b) || c.rewriteTemplate(b, function (d) { return r.G.Oa(d, c) }) }, Oa: function (b, c) { return b.replace(f, function (d, e, g, h, i, j, k) { d = k; d = r.o.P(d); return c.createJavaScriptEvaluatorBlock("ko.templateRewriting.applyMemoizedBindingsToNextSibling(function() {                     return (function() { return { " + d + " } })()                 })") + e }) },
        va: function (b) { return r.j.S(function (c, d) { c.nextSibling && r.Y(c.nextSibling, b, d) }) } 
    }
} (); r.b("ko.templateRewriting", r.G); r.b("ko.templateRewriting.applyMemoizedBindingsToNextSibling", r.G.va);
(function () {
    function f(c, d, e, g, h) { var i = r.a.d(g); h = h || {}; var j = h.templateEngine || b; r.G.Fa(e, j); e = j.renderTemplate(e, i, h); if (typeof e.length != "number" || e.length > 0 && typeof e[0].nodeType != "number") a("Template engine must return an array of DOM nodes"); e && r.a.h(e, function (k) { r.j.sa(k, [g]) }); switch (d) { case "replaceChildren": r.a.Ua(c, e); break; case "replaceNode": r.a.ka(c, e); break; case "ignoreTargetNode": break; default: a(Error("Unknown renderMode: " + d)) } h.afterRender && h.afterRender(e, g); return e } var b; r.oa =
function (c) { if (c != undefined && !(c instanceof r.X)) a("templateEngine must inherit from ko.templateEngine"); b = c }; r.T = function (c, d, e, g, h) { e = e || {}; if ((e.templateEngine || b) == undefined) a("Set a template engine before calling renderTemplate"); h = h || "replaceChildren"; if (g) { var i = g.nodeType ? g : g.length > 0 ? g[0] : o; return new r.m(function () { var j = f(g, h, c, d, e); if (h == "replaceNode") { g = j; i = g.nodeType ? g : g.length > 0 ? g[0] : o } }, o, { disposeWhen: function () { return !i || !r.a.A(i) } }) } else return r.j.S(function (j) { r.T(c, d, e, j, "replaceNode") }) };
    r.Ta = function (c, d, e, g) { new r.m(function () { var h = r.a.d(d) || []; if (typeof h.length == "undefined") h = [h]; h = r.a.J(h, function (i) { return e.includeDestroyed || !i._destroy }); r.a.ma(g, h, function (i) { return f(o, "ignoreTargetNode", c, i, e) }, e) }, o, { disposeWhen: function () { return !r.a.A(g) } }) }; r.c.template = { update: function (c, d, e, g) {
        d = r.a.d(d()); e = typeof d == "string" ? d : d.name; if (typeof d.foreach != "undefined") r.Ta(e, d.foreach || [], { afterAdd: d.afterAdd, beforeRemove: d.beforeRemove, includeDestroyed: d.includeDestroyed, afterRender: d.afterRender },
c); else { var h = d.data; r.T(e, typeof h == "undefined" ? g : h, { afterRender: d.afterRender }, c) } 
    } 
    }
})(); r.b("ko.setTemplateEngine", r.oa); r.b("ko.renderTemplate", r.T);
r.a.r = function (f, b, c) {
    if (c === undefined) return r.a.r(f, b, 1) || r.a.r(f, b, 10) || r.a.r(f, b, Number.MAX_VALUE); else {
        f = f || []; b = b || []; for (var d = f, e = b, g = [], h = 0; h <= e.length; h++) g[h] = []; h = 0; for (var i = Math.min(d.length, c); h <= i; h++) g[0][h] = h; h = 1; for (i = Math.min(e.length, c); h <= i; h++) g[h][0] = h; i = d.length; var j, k = e.length; for (h = 1; h <= i; h++) {
            var l = Math.min(k, h + c); for (j = Math.max(1, h - c); j <= l; j++) g[j][h] = d[h - 1] === e[j - 1] ? g[j - 1][h - 1] : Math.min(g[j - 1][h] === undefined ? Number.MAX_VALUE : g[j - 1][h] + 1, g[j][h - 1] === undefined ? Number.MAX_VALUE :
g[j][h - 1] + 1)
        } f = f; b = b; c = f.length; d = b.length; e = []; h = g[d][c]; if (h === undefined) g = o; else { for (; c > 0 || d > 0; ) { i = g[d][c]; j = d > 0 ? g[d - 1][c] : h + 1; k = c > 0 ? g[d][c - 1] : h + 1; l = d > 0 && c > 0 ? g[d - 1][c - 1] : h + 1; if (j === undefined || j < i - 1) j = h + 1; if (k === undefined || k < i - 1) k = h + 1; if (l < i - 1) l = h + 1; if (j <= k && j < l) { e.push({ status: "added", value: b[d - 1] }); d-- } else { if (k < j && k < l) e.push({ status: "deleted", value: f[c - 1] }); else { e.push({ status: "retained", value: f[c - 1] }); d-- } c-- } } g = e.reverse() } return g
    } 
}; r.b("ko.utils.compareArrays", r.a.r);
(function () {
    function f(b, c) { var d = []; r.m(function () { var e = b(c) || []; d.length > 0 && r.a.ka(d, e); d.splice(0, d.length); r.a.L(d, e) }, o, { disposeWhen: function () { return d.length == 0 || !r.a.A(d[0]) } }); return d } r.a.ma = function (b, c, d, e) {
        c = c || []; e = e || {}; var g = r.a.e.t(b, "setDomNodeChildrenFromArrayMapping_lastMappingResult") === undefined, h = r.a.e.t(b, "setDomNodeChildrenFromArrayMapping_lastMappingResult") || [], i = r.a.K(h, function (s) { return s.wa }), j = r.a.r(i, c); c = []; var k = 0, l = []; i = []; for (var n = o, q = 0, w = j.length; q < w; q++) switch (j[q].status) {
            case "retained": var t =
h[k]; c.push(t); if (t.B.length > 0) n = t.B[t.B.length - 1]; k++; break; case "deleted": r.a.h(h[k].B, function (s) { l.push({ element: s, index: q, value: j[q].value }); n = s }); k++; break; case "added": t = f(d, j[q].value); c.push({ wa: j[q].value, B: t }); for (var v = 0, x = t.length; v < x; v++) { var u = t[v]; i.push({ element: u, index: q, value: j[q].value }); if (n == o) b.firstChild ? b.insertBefore(u, b.firstChild) : b.appendChild(u); else n.nextSibling ? b.insertBefore(u, n.nextSibling) : b.appendChild(u); n = u } 
        } r.a.h(l, function (s) { r.a.e.N(s.element) }); d = p; if (!g) {
            if (e.afterAdd) for (q =
0; q < i.length; q++) e.afterAdd(i[q].element, i[q].index, i[q].value); if (e.beforeRemove) { for (q = 0; q < l.length; q++) e.beforeRemove(l[q].element, l[q].index, l[q].value); d = m } 
        } d || r.a.h(l, function (s) { s.element.parentNode && s.element.parentNode.removeChild(s.element) }); r.a.e.la(b, "setDomNodeChildrenFromArrayMapping_lastMappingResult", c)
    } 
})(); r.b("ko.utils.setDomNodeChildrenFromArrayMapping", r.a.ma);
r.R = function () {
    function f(c) { var d = document.getElementById(c); if (d == o) a(Error("Cannot find template with ID=" + c)); return d } this.u = function () { if (typeof jQuery == "undefined" || !jQuery.tmpl) return 0; if (jQuery.tmpl.tag) return 2; return 1 } (); var b = RegExp("__ko_apos__", "g"); this.renderTemplate = function (c, d) {
        if (this.u == 0) a(Error("jquery.tmpl not detected.\nTo use KO's default template engine, reference jQuery and jquery.tmpl. See Knockout installation documentation for more details.")); if (this.u == 1) {
            var e =
'<script type="text/html">' + f(c).text + "<\/script>"; e = jQuery.tmpl(e, d)[0].text.replace(b, "'"); return jQuery.clean([e], document)
        } d = [d]; e = f(c).text; return jQuery.tmpl(e, d)
    }; this.isTemplateRewritten = function (c) { return f(c).Ma === m }; this.rewriteTemplate = function (c, d) { var e = f(c), g = d(e.text); if (this.u == 1) { g = r.a.l(g); g = g.replace(/([\s\S]*?)(\${[\s\S]*?}|{{[\=a-z][\s\S]*?}}|$)/g, function (h, i, j) { return i.replace(/\'/g, "__ko_apos__") + j }) } e.text = g; e.Ma = m }; this.createJavaScriptEvaluatorBlock = function (c) {
        if (this.u ==
1) return "{{= " + c + "}}"; return "{{ko_code ((function() { return " + c + " })()) }}"
    }; this.ta = function (c, d) { document.write("<script type='text/html' id='" + c + "'>" + d + "<\/script>") }; r.g(this, "addTemplate", this.ta); if (this.u > 1) jQuery.tmpl.tag.ko_code = { open: "_.push($1 || '');"}
}; r.R.prototype = new r.X; r.oa(new r.R); r.b("ko.jqueryTmplTemplateEngine", r.R);